//可以输入的最大单词数
/*键盘出现了一些故障，有些字母键无法正常工作。而键盘上所有其他键都能够正常工作。

给你一个由若干单词组成的字符串 text ，单词间由单个空格组成（不含前导和尾随空格）；另有一个字符串 brokenLetters ，由所有已损坏的不同字母键组成，返回你可以使用此键盘完全输入的 text 中单词的数目。
1 <= text.length <= 104
0 <= brokenLetters.length <= 26
text 由若干用单个空格分隔的单词组成，且不含任何前导和尾随空格
每个单词仅由小写英文字母组成
brokenLetters 由 互不相同 的小写英文字母组成
*/
class Solution {
public:
    int canBeTypedWords(string text, string brokenLetters) {
        int hash[26] = {0};
        int count = 0;
        for (auto i : brokenLetters) {
            hash[i - 'a']++;
        }
        int floag = 0;
        for (int i = 0; i < text.size() + 1; i++) {
            if (text[i] != ' ' && text[i] != '\0') {
                if (hash[text[i] - 'a']) {
                    while (i < text.size() && text[i + 1] != ' ') {
                        i++;
                    }
                    floag++;
                }
            } else {
                if (floag == 0) {
                    count++;
                } else {
                    floag = 0;
                }
            }
        }
        return count;
    }
};


//比较含退格的字符串
/*给定 s 和 t 两个字符串，当它们分别被输入到空白的文本编辑器后，如果两者相等，返回 true 。# 代表退格字符。

注意：如果对空文本输入退格字符，文本继续为空。
你可以用 O(n) 的时间复杂度和 O(1) 的空间复杂度解决该问题吗？
*/
class Solution {
public:
    string is_new_string(string& s) {
        string arr;
        for (auto i : s) {
            if (i != '#')
                arr.push_back(i);
            else if (arr.size())
                arr.pop_back();
        }
        return arr;
    }
    bool backspaceCompare(string s, string t) {
        const string new_S = is_new_string(s);
        const string new_T = is_new_string(t);
        return new_S == new_T;
    }
};